package com.controller;


import com.pojo.Msg;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.web.servlet.ShiroHttpServletRequest;
import org.apache.shiro.web.servlet.ShiroHttpServletResponse;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartRequest;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;


//@RequiresPermissions(value={"foodTable:*"})
//@CrossOrigin(allowCredentials = "true", allowedHeaders = "*")

@RestController
public class UploadDownController {
//    /**
//     * 文件上传
//     * @param
//     * @param request   @RequestParam("picture")
//     * @return 使用了shiro后出现问题
//     */
//    @CrossOrigin(allowCredentials = "true", allowedHeaders = "*")
//    @CrossOrigin(allowedHeaders = "http://localhost:3000")
//    @CrossOrigin
//    @RequestMapping(value = "/upload",method = RequestMethod.POST)
//    public Msg upload(@RequestParam("picture") MultipartFile picture, HttpServletRequest request) {
//
////        URL pic_path = this.getClass().getResource("../../webapp/static/image");
//        System.out.println("开始上传图片，下面需要检验数据格式");
//        //上传图片
//        if(picture!=null){
//            //存储图片的物理路径,服务器端放图片的路径，此处硬编码，同时在Tomcat 的conf文件夹下 server.xml文件修改配置
//            String pic_path = "/Users/chenjiaqi/IdeaProjects/16hmis/src/main/webapp/static/image/uploadPic/";
//            //上传图片的原始名称
//            String ori_pic_name =  picture.getOriginalFilename();
//            System.out.println("文件的原始名称为:" + ori_pic_name);
//
//            //设置文件新名称: 当前时间+文件名称（不包含格式）
//            Date d = new Date();
//            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//            String date = sdf.format(d);
//
//            //新的图片名称
//            String  newFileName = date + UUID.randomUUID() + ori_pic_name.substring(ori_pic_name.lastIndexOf("."));
//
//            File newFile =  new File(pic_path+ newFileName);
//
//            //将内存中的数据写入磁盘,可能会报错，方法需要抛出异常
//
//            try{
//                picture.transferTo(newFile);
//                System.out.println("上传成功:"+ newFile.getAbsolutePath());
//                //将文件在服务器的存储路径返回
//                Msg msg = Msg.success().add("message","上传成功");
//                msg.add("picUrl", newFileName);
//                return msg;
//            }catch (IOException e){
//                System.out.println("上传失败");
//                e.printStackTrace();
//                return  Msg.fail().add("message", "上传失败");
//            }
//        }






//        fix bug 使用了shiro 后解决文件不能上传的问题
//        @RequestParam("picture")
//    @RequestParam(value = "picture" ,required = false) MultipartFile picture
//    ,  consumes = "multipart/form-data"
        @CrossOrigin
        @RequestMapping(value = "/upload",method = RequestMethod.POST)
        public Msg upload(@RequestParam("picture") MultipartFile picture, HttpServletResponse response, HttpServletRequest request) {

//        URL pic_path = this.getClass().getResource("../../webapp/static/image");
//            System.out.println("我需要打印这个request");
//            System.out.println(request);
            System.out.println("开始上传图片，下面需要检验数据格式");

//            System.out.println(picture.getOriginalFilename());
            System.out.println(picture.getOriginalFilename());

            // 转型为MultipartHttpRequest
//            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//            MultipartFile picture = multipartRequest.getFile("picture");

//            ShiroHttpServletRequest shiroRequest = (ShiroHttpServletRequest) request;
//            StandardServletMultipartResolver resolver = new StandardServletMultipartResolver();
//            MultipartHttpServletRequest multipartHttpServletRequest = resolver.resolveMultipart(shiroRequest);
//            MultipartFile picture = multipartHttpServletRequest.getFile("picture");


//            MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//
//            MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);
//
//            MultipartFile picture = multipartRequest.getFile("picture");

//            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//
//
//            MultipartFile picture = multipartRequest.getFile("picture");



            //上传图片
            if(picture!=null){
                //存储图片的物理路径,服务器端放图片的路径，此处硬编码，同时在Tomcat 的conf文件夹下 server.xml文件修改配置
                String pic_path = "/Users/chenjiaqi/IdeaProjects/16hmis/src/main/webapp/static/image/uploadPic/";
                //上传图片的原始名称
                String ori_pic_name =  picture.getOriginalFilename();
                System.out.println("文件的原始名称为:" + ori_pic_name);

                //设置文件新名称: 当前时间+文件名称（不包含格式）
                Date d = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
                String date = sdf.format(d);

                //新的图片名称
                String  newFileName = date + UUID.randomUUID() + ori_pic_name.substring(ori_pic_name.lastIndexOf("."));

                File newFile =  new File(pic_path+ newFileName);

                //将内存中的数据写入磁盘,可能会报错，方法需要抛出异常

                try{
                    picture.transferTo(newFile);
                    System.out.println("上传成功:"+ newFile.getAbsolutePath());
                    //将文件在服务器的存储路径返回
                    Msg msg = Msg.success().add("message","上传成功");
                    msg.add("picUrl", newFileName);
                    return msg;
                }catch (IOException e){
                    System.out.println("上传失败");
                    e.printStackTrace();
                    return  Msg.fail().add("message", "上传失败");
                }
            }







//        File filePath = new File(path);
//        System.out.println("文件的保存路径：" + path);
//        if (!filePath.exists() && !filePath.isDirectory()) {
//            System.out.println("目录不存在，创建目录:" + filePath);
//            filePath.mkdir();
//        }
//
//        //获取原始文件名称(包含格式)
//        String originalFileName = picture.getOriginalFilename();
//        System.out.println("原始文件名称：" + originalFileName);
//
//        //获取文件类型，以最后一个`.`为标识
//        String type = originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
//        System.out.println("文件类型：" + type);
//        //获取文件名称（不包含格式）
//        String name = originalFileName.substring(0, originalFileName.lastIndexOf("."));
//
//        //设置文件新名称: 当前时间+文件名称（不包含格式）
//        Date d = new Date();
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//        String date = sdf.format(d);
//        String fileName = date + name + "." + type;
//        System.out.println("新文件名称：" + fileName);
//
//        //在指定路径下创建一个文件
//        File targetFile = new File(path, fileName);
//
//        //将文件保存到服务器指定位置
//        try {
//            picture.transferTo(targetFile);
//            System.out.println("上传成功");
//            //将文件在服务器的存储路径返回
//            Msg msg = Msg.success().add("message","上传成功");
//            msg.add("pic_url", "/upload" + fileName);
//            return msg;
//
//        } catch (IOException e) {
//            System.out.println("上传失败");
//            e.printStackTrace();
//            return  Msg.fail().add("message", "上传失败");
//        }


        return null;
    }


    //先删除图片再上传图片，controller中完成  @RequestParam("picture")
//    @CrossOrigin(allowCredentials = "true", allowedHeaders = "*")
//    @CrossOrigin
    @RequestMapping(value = "/deletepic",method = RequestMethod.POST)
    public Msg deletePic(@RequestParam("picture") String delPicture, HttpServletRequest request){
        //用于直接删除服务器这端的图片

        String pic_path = "/Users/chenjiaqi/IdeaProjects/16hmis/src/main/webapp/static/image/uploadPic/";
//        File file = new File(pic_path+delPicture.getOriginalFilename());
//        System.out.println(delPicture.getOriginalFilename()+"删除图片的原始名称");
        File file = new File(pic_path+delPicture);
        System.out.println("开始删除图片");
        System.out.println(pic_path+delPicture);
        if(!file.exists()){
            System.out.println("删除失败1");
            return Msg.fail().add("message","图片删除失败，目标图片不存在");
        }else{
            // 如果文件路径所对应的文件存在，并且是一个文件，则直接删除
            if(file.exists()&&file.isFile()){
                if(file.delete()){
                    System.out.println("删除成功");
                    return Msg.success().add("message", "图片删除成功！");
                }else{
                    System.out.println("删除失败2");
                    return Msg.fail().add("message","图片删除失败");
                }
            }else{
                System.out.println("删除失败3");
                return Msg.fail().add("message","图片删除失败，目标图片不存在");
            }
        }
    }




}
